2024 Chine Grand Prix¶

各位经理您好 and welcome to the Chinese Grand Prix of 2024 race report! Another early morning start for this one, though not quite as bright and early as Australia and Japan. China has een off the calendar now for 5 years, being one of the first races to cancel due to covid and keep the restrictions in place ever since. Last time F1 raced in China, Lewis Hamilton was only a 5 time world champion, Piastri wasn't an F1 driver yet (nor was Zhou, Sargeant, or Tsunoda), Daniel Ricciardo was at Red Bull, Max had only won a handful of race, Seb was still in red, Alonso was still retired, and Renault were still in the sport. It's fair to say a lot has changed since then, but the average race track and racing hasn't. So let's get into it.

Current gossip in the paddock is about who will drive for the silver arrows next year, with many rumours circling that Esteban Ocon will be in black/silver/white next year, finally proving that standing next to Toto for a year was all worth it. Mick must be hoping his time is coming in the next 10 years then. This is sparked by the unofficial confirmation that Audi have approached Carlos Sainz and Nico Hulkenberg for a drive in 2025 and beyond, the German manufacturer placing their hopes on a rookie season in some pretty safe hands. This would, of course, open up a spot at Haas for a certain Oliver Bearman, who is already well set in the Ferrari stable. It would also leave an open slot perhaps at Red Bull and Mercedes, with Sainz previously linked to both drives and Alonso now signed on at Aston Martin. it seems wild that mercedes would risk that seat on a rookie driver, but I'm sure it wouldn't take much for Ocon to jump ship given the current tractor he is driving. It seems that we are denied, once again, the news that will set into motion the wildest silly season for a long long time, perhaps it will all kick off around the Belgian Grand prix in August.

In [ ]:
import os
import subprocess
import src.dataIO as io
import src.webDataIO as wio

from pathlib import Path

year = 2024
race = 'China'

Grand Prix Report¶

The major story from Free Practice was the grass catching fire at turn 7, believed to be caused by the sparking of the titanium skid blocks beneath the cars as they bottom out under high load. It's been a while since F1 cars were driven around the Chinese grand prix circuit, and since then the cars have become far more dependent on under floor downforce, and therefore have improved the underfloor protection. It certainly gave the fire marshalls something to think about down there as the grass caught fire during FP3 and sprint qualifying. There really wasn't much else to talk about throughout the weekend, apart from the constantly circulating pictures of Guanyu Zhou in the crowd in 2011, or whenever it was. The home hero was even given his own parking space on the grid after the Grand Prix, which many have said feels like a "participation medal" sort of moment. It did feel a bit unusual, but after news that the FIA are looking to expand their influence in Asia after the Chinese GP, it does make sense that they would appear to put on a big song and dance for F1's first ever Chinese driver.

Sprint Qualifying¶

Sprint qualifying was moved to the Friday afternoon after FP1, a change that has been asked for since the sprint was launched back in 2021. Last year, you might remember, the Friday afternoon normally held the feature race qualifying session, which many complained detracted from the build up of a Grand Prix weekend. However, sprint qualifying was a mixed-weather session, so it would have made for quite the exciting session had it been for the feature race. Williams and Alpine were joined by Yuki Tsunoda as SQ3 finishers, the Japanese star from last race just not hooking it up all weekend. No surprise that Lance Stroll only managed to qualifying fifteenth, with Ricciardo just ahead. However, both Haas drivers managed to make it into SQ2, showing that there is some real one-lap pace in that car. Haas have been quietly getting on with business this year, and it's really paying off for them. George Russell, yes George Russell, didn't make it into SQ3, the Brit getting out-qualified by both Kick Sauber drivers, who were able to put in some stonking laps over the weekend in that car.

SQ2 was slightly disrupted by the great fire of turn 7, which means that we got some rain in SQ3 and boy did it cause some chaos. Charles Leclerc dropped it in the barrier early in the session but was able to keep going, Lando Norris went off track to gain a massive advantage for his lap, as did title rival (according to the pundits) Max Verstappen, but Lewis Hamilton was really on it. Unfortunately for Lewis, the FIA are deeply racist and decided to reinstate Lando's lap which was in clear violation of every other track's final corner throughout the season, except for this race, proving once and for all that any does not mean all. As Hamilton crossed the line for his victory sprint pole lap, they reinstated Lando's lap which place him on the first place position (legally I'm not allowed to call it pole). Fernando Alonso managed to slot in just behind the British pairing ahead of Max Verstappen, with both Red Bull drivers struggling in the wet conditions. This really set the stage for a worldie of a sprint race, and it really made a lot of people wish that this had been the real qualifying.

Now let me just comment on this Lando Norris incident because I think that the sassy comment and the picture I put in the group chat showing his lap time being invalidated as it does in the game is perhaps not clear enough. It is an absolute disgrace that the only track on the calendar not to have it in the rule books that if you leave the track on the last corner then you have this and the next lap discounted because there is every chance that this gains you an advantage. Especially when this is the only circuit we have had in the last year where this rule has been required to be proved. Yes, they have put a gravel trap on the outside of the corner, but really it doesn't matter because there was a clear difference between Lando's laps throughout qualifying and it was the last lap where he went significantly faster and went off the track, not saying that the two are connected but it is a bit of a coincidence. All I am asking for is some consistency, something that will become quite the hot topic throughout this report.

In [ ]:
wio.outputs_sq_data(
    year=year,
    race=race)
Pos No Driver Car Q1 Q2 Q3 Laps
1 4 Lando Norris NOR McLaren Mercedes 1:36.384 1:36.047 1:57.940 13
2 44 Lewis Hamilton HAM Mercedes 1:37.181 1:36.287 1:59.201 15
3 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 1:36.883 1:36.119 1:59.915 14
4 1 Max Verstappen VER Red Bull Racing Honda RBPT 1:36.456 1:35.606 2:00.028 12
5 55 Carlos Sainz SAI Ferrari 1:36.719 1:36.052 2:00.214 15
6 11 Sergio Perez PER Red Bull Racing Honda RBPT 1:36.110 1:35.781 2:00.375 12
7 16 Charles Leclerc LEC Ferrari 1:36.537 1:35.711 2:00.566 15
8 81 Oscar Piastri PIA McLaren Mercedes 1:36.542 1:35.853 2:00.990 15
9 77 Valtteri Bottas BOT Kick Sauber Ferrari 1:37.112 1:36.056 2:01.044 16
10 24 Zhou Guanyu ZHO Kick Sauber Ferrari 1:37.544 1:36.307 2:03.537 16
11 63 George Russell RUS Mercedes 1:37.310 1:36.345 10
12 20 Kevin Magnussen MAG Haas Ferrari 1:37.033 1:36.473 10
13 27 Nico Hulkenberg HUL Haas Ferrari 1:36.924 1:36.478 10
14 3 Daniel Ricciardo RIC RB Honda RBPT 1:37.321 1:36.553 9
15 18 Lance Stroll STR Aston Martin Aramco Mercedes 1:36.961 1:36.677 8
16 10 Pierre Gasly GAS Alpine Renault 1:37.632 6
17 31 Esteban Ocon OCO Alpine Renault 1:37.720 6
18 23 Alexander Albon ALB Williams Mercedes 1:37.812 6
19 22 Yuki Tsunoda TSU RB Honda RBPT 1:37.892 6
20 2 Logan Sargeant SAR Williams Mercedes 1:37.923 6

Sprint Race¶

The sprint race was nothing short of a disaster for Lando Norris, with the Brit suffering a turn 1 incident avoiding a very defensive Lewis Hamilton on the outside of turn 1, running wide, and dropping down the order. Lewis managed to hold on to the lead of the race for quite some time before the inevitable happened. Max Verstappen won the sprint race, by 13 seconds. The guy only took the lead with about 10 laps to go and seemed to be unstoppable in that race. Lewis did hold on to second ahead of a charging Sergio Perez, the Mexican driver not having the best of luck carving his way through the field to round out the podium. The two Ferrari drivers were next up, having spent most of the race battling far too aggressively with each other over points that really make no difference. It's all about pride now, it's all about showing Ferrari they made the right decision for Leclerc and the wrong one for Carlos. It did result in an early DNF for Fernando Alonso, who had done so well to hold on to his third place for so long before tumbling behind Perez into the clutches of Carlos Sainz, who had a little coming together with his fellow countryman. Let's quickly mention Fernando's penalty here, because he was given a 10 second penalty after the race and 3 penalty points for his dive bomb back to Sainz in the tighter sections of sector 2. It seemed very unfair, despite not making a difference to the result, but for what exactly? He made an ambitious overtake, is that not what we want drivers to be doing during a sprint?

A shining performance for Guanyu Zhou at his first ever home Grand Prix during the sprint, it's a shame it didn't result in points, but Zhou managed to hold on to ninth place and was under pressure from Magnussen and Ricciardo for most of the session. The Chinese driver showed a lot of pace throughout the weekend, it's just a shame that it didn't yield any points. A brief comment on Mercedes trying the soft tyre compound during the sprint for George, who rounded out the top 8 and secured 1 point. It was a risky move with the high tyre wear around the Chinese circuit, but George was some way off the pace of the front runners, ending up in a final lap duel with Oscar Piastri, again. Oscar has not really been on the pace of Lando consistently lately and it's starting to become very obvious. It's an odd one as the Australian is the last McLaren driver to finish first in any race format for the Woking-based team since Ricciardo won in Monza.

In [ ]:
wio.outputs_sprint_data(
    year=year,
    race=race)
China
Pos No Driver Car Laps Time/Retired PTS
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 19 32:04.660 8
2 44 Lewis Hamilton HAM Mercedes 19 +13.043s 7
3 11 Sergio Perez PER Red Bull Racing Honda RBPT 19 +15.258s 6
4 16 Charles Leclerc LEC Ferrari 19 +17.486s 5
5 55 Carlos Sainz SAI Ferrari 19 +20.696s 4
6 4 Lando Norris NOR McLaren Mercedes 19 +22.088s 3
7 81 Oscar Piastri PIA McLaren Mercedes 19 +24.713s 2
8 63 George Russell RUS Mercedes 19 +25.696s 1
9 24 Zhou Guanyu ZHO Kick Sauber Ferrari 19 +31.951s 0
10 20 Kevin Magnussen MAG Haas Ferrari 19 +37.398s 0
11 3 Daniel Ricciardo RIC RB Honda RBPT 19 +37.840s 0
12 77 Valtteri Bottas BOT Kick Sauber Ferrari 19 +38.295s 0
13 31 Esteban Ocon OCO Alpine Renault 19 +39.841s 0
14 18 Lance Stroll STR Aston Martin Aramco Mercedes 19 +40.299s 0
15 10 Pierre Gasly GAS Alpine Renault 19 +40.838s 0
16 22 Yuki Tsunoda TSU RB Honda RBPT 19 +41.870s 0
17 23 Alexander Albon ALB Williams Mercedes 19 +42.998s 0
18 2 Logan Sargeant SAR Williams Mercedes 19 +46.352s 0
19 27 Nico Hulkenberg HUL Haas Ferrari 19 +49.630s 0
20 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 17 DNF 0

Qualifying Report¶

After quite an exciting sprint qualifying session, the main qualifying session (now on a Saturday evening for sprint weekends) was rather dull. Very little in the way of incidents or weather. The Red Bulls locked out the front row with Max taking pole, and Fernando Alonso put his Aston Martin in third, the Spaniard doing his utmost to eek every ounce of performance from that car in every session. The real shock, however, was the early exit of Yuki Tsunoda in Q1. After a series of standout performances recently, Yuki just hasn't been on the pace all weekend and there seems to be very little understanding from the team as to why that might be. It's not like there isn't pace in that car, as his teammate Ricciardo managed to scrape through to Q2 and put his RB in twelfth. Oh and also Lewis Hamilton didn't make it out of Q1 and could only manage to beat Yuki and Logan.

That's a bit unfair. Lewis was talking before the session about how the team had made some major updates to the setup between the sprint and qualifying, which makes absolutely no sense. Why would Mercedes make changes to a car that for the first time all season was able to compete at the top? Mercedes really do not have a clue what they're doing with that car at all. Other woes down the grid include Guanyu Zhou, the home hero not able to replicate the sprint qualifying performance from the day before and not able to equal his teammate who made it through to Q3.

In [ ]:
wio.outputs_qualifying_data(
    year=year,
    race=race)
Pos No Driver Car Q1 Q2 Q3 Laps
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 1:34.742 1:33.794 1:33.660 18
2 11 Sergio Perez PER Red Bull Racing Honda RBPT 1:35.457 1:34.026 1:33.982 19
3 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 1:35.116 1:34.652 1:34.148 15
4 4 Lando Norris NOR McLaren Mercedes 1:34.842 1:34.460 1:34.165 15
5 81 Oscar Piastri PIA McLaren Mercedes 1:35.014 1:34.659 1:34.273 16
6 16 Charles Leclerc LEC Ferrari 1:34.797 1:34.399 1:34.289 20
7 55 Carlos Sainz SAI Ferrari 1:34.970 1:34.368 1:34.297 17
8 63 George Russell RUS Mercedes 1:35.084 1:34.609 1:34.433 20
9 27 Nico Hulkenberg HUL Haas Ferrari 1:35.068 1:34.667 1:34.604 21
10 77 Valtteri Bottas BOT Kick Sauber Ferrari 1:35.169 1:34.769 1:34.665 15
11 18 Lance Stroll STR Aston Martin Aramco Mercedes 1:35.334 1:34.838 12
12 3 Daniel Ricciardo RIC RB Honda RBPT 1:35.443 1:34.934 12
13 31 Esteban Ocon OCO Alpine Renault 1:35.356 1:35.223 15
14 23 Alexander Albon ALB Williams Mercedes 1:35.384 1:35.241 14
15 10 Pierre Gasly GAS Alpine Renault 1:35.287 1:35.463 15
16 24 Zhou Guanyu ZHO Kick Sauber Ferrari 1:35.505 8
17 20 Kevin Magnussen MAG Haas Ferrari 1:35.516 6
18 44 Lewis Hamilton HAM Mercedes 1:35.573 6
19 22 Yuki Tsunoda TSU RB Honda RBPT 1:35.746 9
20 2 Logan Sargeant SAR Williams Mercedes 1:36.358 7

Race Report¶

Max Verstappen takes yet another Grand Prix win this season and starts his new streak, how long can this one go on for? The Dutch driver finished 13 seconds ahead of Lando Norris, who had a much better race than he did in the sprint, albeit quite a lonely day between the two Red Bulls. Sergio Perez managed to round out the podium, beating both of the Ferrari drivers in fourth and fifth. Much like the sprint race in that sense. The usual top teams rounded out the rest of the top ten, with Lewis Hamilton able to turn his woeful qualifying into a mediocre race performance. But a standout show from Nico Hulkenberg in tenth to secure Haas another crucial point in their championship fight with the rest of the midfield.

It was a miserable race for RB, the junior Red Bull team suffering a double DNF entirely out of their control. Lance Stroll decided he didn't want to brake and wanted to use Ricciardo's brakes instead, causing massive damage to the Australian's car, and Kevin Magnussen decided to risk an overtake and collided with Tsunoda to cause some more massive damage to the Italian team's bank account. Let's discuss the Stroll incident because it has taken the internet by storm. If you don't know what I'm talking about, then let me explain. There was a safety car period for the retirement of Valtteri Bottas, which yes I will discuss in a moment, and as the safety car was ending, Max backed the pack up into the hairpin (as he is entitled to do as the leader). Everyone slams on, apart from Lance who is too busy watching the apex of the corners and the leaders. He hits the back of Ricciardo ahead who shoots up into the air and suffers massive damage to the rear end. Lance, blamed Ricciardo, Ricciardo got angry, Lance got a penalty of 10 seconds and 2 penalty points. "2 points" I hear you say, "But Josh that doesn't sound like very many points". Well, you're right, it's not. His teammate got 3 for an overtake on Sainz, and a 20 second penalty in Australia for Russell being washed. It baffles me, it really does.

The Bottas safety car. Bottas was parked at the end of one of the straights into a heavy braking zone, I forget the corner number, standing next to his car, trying to get it ready for the marshalls to come and collect it. How did it take the race director so long to throw a VSC or even a safety car, while we were literally watching to cars battling hard heading straight towards him. It's a joke. They have the VSC for exactly this reason and it works in every other form of motorsport where they have some sort of full course yellow, or virtual safety measures. Why can it not work in F1? What are they waiting for? Something to go wrong? I only have one more thing to comment on about the race, because actually it was quite dull. Guanyu Zhou getting his own special place on the grid didn't really seem to make sense. That is all.

In [ ]:
wio.outputs_race_result(
    year=year,
    race=race)
Pos No Driver Car Laps Time/Retired PTS
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 56 1:40:52.554 25
2 4 Lando Norris NOR McLaren Mercedes 56 +13.773s 18
3 11 Sergio Perez PER Red Bull Racing Honda RBPT 56 +19.160s 15
4 16 Charles Leclerc LEC Ferrari 56 +23.623s 12
5 55 Carlos Sainz SAI Ferrari 56 +33.983s 10
6 63 George Russell RUS Mercedes 56 +38.724s 8
7 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 56 +43.414s 7
8 81 Oscar Piastri PIA McLaren Mercedes 56 +56.198s 4
9 44 Lewis Hamilton HAM Mercedes 56 +57.986s 2
10 27 Nico Hulkenberg HUL Haas Ferrari 56 +60.476s 1
11 31 Esteban Ocon OCO Alpine Renault 56 +62.812s 0
12 23 Alexander Albon ALB Williams Mercedes 56 +65.506s 0
13 10 Pierre Gasly GAS Alpine Renault 56 +69.223s 0
14 24 Zhou Guanyu ZHO Kick Sauber Ferrari 56 +71.689s 0
15 18 Lance Stroll STR Aston Martin Aramco Mercedes 56 +82.786s 0
16 20 Kevin Magnussen MAG Haas Ferrari 56 +87.533s 0
17 2 Logan Sargeant SAR Williams Mercedes 56 +95.110s 0
NC 3 Daniel Ricciardo RIC RB Honda RBPT 33 DNF 0
NC 22 Yuki Tsunoda TSU RB Honda RBPT 26 DNF 0
NC 77 Valtteri Bottas BOT Kick Sauber Ferrari 19 DNF 0

Fastest Lap¶

Fastest lap this week goes to Fernando Alonso, who boxed for softs at the end of the race to hunt down the drivers ahead in some sort of weird strategy. He was able to hunt down many ahead of him, including seven-time world champion Lewis Hamilton. Fernando managed a 1:37:810 lap time, and he managed to save a drift into the last corner that has put many into the barriers over the years.

In [ ]:
wio.outputs_fastest_lap(
    year=year,
    race=race)
Pos No Driver Car Lap Time of day Time Avg Speed
1 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 45 16:26:55 1:37.810 200.629
2 1 Max Verstappen VER Red Bull Racing Honda RBPT 33 16:06:26 1:38.406 199.414
3 24 Zhou Guanyu ZHO Kick Sauber Ferrari 42 16:22:15 1:38.633 198.955
4 4 Lando Norris NOR McLaren Mercedes 33 16:06:27 1:38.751 198.717
5 10 Pierre Gasly GAS Alpine Renault 40 16:18:50 1:39.198 197.822
6 16 Charles Leclerc LEC Ferrari 33 16:06:29 1:39.384 197.452
7 11 Sergio Perez PER Red Bull Racing Honda RBPT 33 16:06:30 1:39.388 197.444
8 18 Lance Stroll STR Aston Martin Aramco Mercedes 37 16:14:01 1:39.444 197.333
9 81 Oscar Piastri PIA McLaren Mercedes 18 15:34:44 1:39.739 196.749
10 55 Carlos Sainz SAI Ferrari 19 15:36:29 1:39.764 196.700
11 63 George Russell RUS Mercedes 39 16:16:37 1:40.112 196.016
12 23 Alexander Albon ALB Williams Mercedes 34 16:08:20 1:40.790 194.697
13 27 Nico Hulkenberg HUL Haas Ferrari 32 16:04:55 1:40.815 194.649
14 44 Lewis Hamilton HAM Mercedes 34 16:08:18 1:40.835 194.610
15 31 Esteban Ocon OCO Alpine Renault 33 16:06:38 1:40.937 194.414
16 3 Daniel Ricciardo RIC RB Honda RBPT 16 15:31:36 1:40.994 194.304
17 2 Logan Sargeant SAR Williams Mercedes 14 15:28:17 1:41.000 194.293
18 20 Kevin Magnussen MAG Haas Ferrari 45 16:27:03 1:41.077 194.145
19 77 Valtteri Bottas BOT Kick Sauber Ferrari 11 15:22:56 1:41.276 193.763
20 22 Yuki Tsunoda TSU RB Honda RBPT 11 15:23:00 1:41.593 193.158

Fantasy League Scores¶

Lineup Scores¶

Ok I think I have waffled enough, let's see what this race has done to the fantasy league standings. First let's begin with the driver/team points for the grid. The data you see below are the current total points and values for each driver and team. Values are taken going into the race and updated for next race after I submit the report.

In [ ]:
weekly_scores = {
    "Name": ["Points", "Value"],
    "Race": [f'{race}'],
    "Ocon": [32, 8.5],
    "Gasly": [9, 7.3],
    "Stroll": [29, 12.5],
    "Alonso": [61, 16.4],
    "Leclerc": [162, 21.7],
    "Sainz": [140, 20.1],
    "Bearman": ["N/A", "N/A"],
    "Magnussen": [48, 8.2],
    "Hulkenberg": [31, 7.7],
    "Bottas": [-5, 6.4],
    "Guanyu": [9, 6.6],
    "Norris": [102, 23.8],
    "Piastri": [76, 19.8],
    "Hamilton": [34, 18.7],
    "Russell": [72, 18.8],
    "Tsunoda": [13, 8.6],
    "Ricciardo": [-15, 9.0],
    "Verstappen": [176, 29.9],
    "Perez": [157, 22.7],
    "Albon": [1, 7.0],
    "Sargeant": [27, 6.4],
    "Alpine": [44, 7.9],
    "Aston Martin": [125, 15.0],
    "Ferrari": [356, 21.2],
    "Haas": [94, 7.7],
    "Kick Sauber": [9, 6.0],
    "McLaren": [218, 24.0],
    "Mercedes": [151, 19.9],
    "RB": [17, 8.6],
    "Red Bull": [445, 28.4],
    "Williams": [33, 6.4]}
root = Path().absolute()
if Path(f'{root}/Data/{year}/Lineup/{race}_Results.json').is_file():
    pass
else:
    io.save_json_dicts(
        out_path=Path(f'{root}/Data/{year}/Lineup_Weekly.json'),
        dictionary=weekly_scores)
subprocess.run(["python", "lineup.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'lineup.py', '2024'], returncode=0)

Another dominant win for Max Verstappen in the fantasy league scores this week, taking home 58 points. Some 18 points behind in second place is Sergio Perez with 40, ahead of Lando Norris in third with 36 points. Previous championship leader Charles Leclerc is in fourth with 34 ahead of Sainz and Hamilton in fifth with 30. Unsurprisingly Valtteri Bottas is in last with -14 after an early DNF, with Daniel Ricciardo and Yuki Tsunoda close behind with -9 and -6, respectively. Alex Albon is next with a whopping 1 point, with Nico Hulkenberg rounding out the bottom five with 4 points.

Red Bull take the top spot again this week with 126 points, nearly double that of Ferrari in second with 74 points. Mercedes take third place with 62 points. A tough week for RB sees them as the only team to score negatively this week with -14, behind Kick Sauber with 4 and Williams with 20.

Max Verstappen takes the lead of the championship back from Ferrari's Charles Leclerc this week, the Dutchman now sits on 176 ahead of Leclerc with 162. Sergio Perez is in third, close behind with 157 points, and Carlos Sainz is in fourth with 140 points. It really is a two-team race at the top. Rounding out the top five is Lando Norris with 102 points, despite costing more than nearly all of the top 4.Daniel Ricciardo is now down at the bottom of the table with the Aussie's retirement over the weekend seeing him on -15 points, behind Kick's Valtteri Bottas on -5. Albon shoots up the table despite not scoring any points, still with 1, behind Pierre Gasly and Guanyu Zhou with 9. Rounding out the bottom five is Yuki Tsunoda with 13 points.

Red Bull continue to pull away at the top of the table with 445 points, ahead of Ferrari with 356, and McLaren with 218. Kick Sauber are still at the bottom with 9 points, behind RB with 17 and Williams with 33 points.

Red Bull return to the top of the standings this week with 319 points, edging out a lead of second place Ferrari with 282 points. These pair are leaps ahead of third place McLaren who are really in a league of their own with 170 points. Kick Sauber are at the bottom of the table with a total of 5 points, which is still less than most of their pit stops this year. Williams are next with 13, and Alpine round out the bottom three with 16 points.

In [ ]:
points_files = [
    'Driver_Points_Bar.png',
    'Team_Points_Bar.png',
    'Driver_Sum Points.png',
    'Team_Sum Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Seems like a lot of values have gone up this week with Verstappen increasing to $29.9, Norris to $23.8, Perez to $22.7, Leclerc to $21.7, and Sainz rounding out the top five to $20.1 million It is now becoming very difficult to break into getting multiple of these top drivers in your team unless you have had them since the start of the season and have a higher budget cap. Bottas and Sargeant are your cheapest options at $6.4, Guanyu with $6.6, Albon at $7.2, Gasly at $7.3, and Hulkenberg rounding out the bottom five at $7.7 million. Red Bull are still your most expensive option at $28.2 and Kick Sauber your cheapest wat $6.0 million.

In [ ]:
average_files = [
    'Driver_Values_Bar.png',
    'Team_Values_Bar.png',
    'Driver_Average Points.png',
    'Team_Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in average_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Your best bang for your buck this week was Kevin Magnussen, not quite sure how but the Danish driver came home with 2.07 points/$m ahead of Guanyu Zhou with 1.97 points/$m. Championship leader Max Verstappen is in third with 1.94 points/$m, Pierre Gasly in fourth with 1.78 points/$m, and Sergio Perez rounds out the top five with 1.76 points/$m. Valtteri Bottas was your worst option this week with -2.19 points/$m, then Ricciardo with -1.0 points/$m and Yuki Tsunoda with -0.7 points/$m. Alex Albon was a flat 0 and then it gets positive with Nico Hulkenberg at 0.52 points/$m and Oscar Piastri with 0.61 points/$m. Red Bull were your best team this week with 4.44 points/$m, their sister team RB were the worst with -1.63 points/$m.

In [ ]:
ppv_files = [
    'Driver_Points Per Value_Bar.png',
    'Team_Points Per Value_Bar.png',
    'Driver_Average Points Per Value.png',
    'Team_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in ppv_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]
In [ ]:
subprocess.run(["python", "manager.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'manager.py', '2024'], returncode=0)

Manager Scores¶

Let's take a look at the winners and losers of the week. China is of course the inaugural sprint race of the season, so it was all to play for in that little prize competition to see who would get off the ground first. It's a strong week, again for manager Stefanus, who takes the top place this week with their team Gelael and 435 points. Hot on their heels in second is Josh and Siemens McLaren West with 430 points, the difference here was McLaren vs Ferrari in the second constructors place, and Norris vs Alonso basically. In third place is Jake and An Oscar for Breakfast who bring home 398. The top three this week are quite a way ahead of the chasing pack. In fourth we have a second appearance from Jake with A Sauber or Kick or Stake and 313 points, and a second appearance from Stefanus and Josh with Haryanto and Petrobras Williams RBS F1 with 308 points rounding out the top five.

It's another weekly win in the Golf League for James down at Bwoah Industries, with their Bwoah Rolex Sipsmith Golf contingency bring home 38 points, almost half of Patrick and Racing No Points in second with 72. Close behind is Stuart and Ferrari Strategists with 76, they have not been the same since they dropped the Sloths branding a few years ago. In fourth place is Charlie and Lee Carvallo's F1 Challen with 84, and Will rounds out the bottom five with The Big One and 90 points. Quite the spread for the Golf League there, probably due to some of the lower teams actually making up some places this week due to reliability and accidents.

Rookie sensation Stefanus has a total strangle hold on this championship at the moment, taking first, second, and third with Haryanto, Gelael, and Syahrul with 1232, 1228, and 1189 points, respectively. Can anyone stop them or is it already game over? There's still quite a long way to go this season and it hasn't been a perfect scoring streak by any means. In fourth place is Toby and Hesketh 2.1 with 1146, perhaps the closest challenger at the moment, and Patrick and Johnny UniHaas round out the top five with 1115 points.

Patrick and Racing No Points are holding on to that lead in the Golf League with 131 but Bwoah Rolex Sipsmith Golf and James are coming for them with 162 points, just 21 points back now. In third place it's Stuart and Ferrari Strategists with 192, in something of a lonely third. Further back in fourth is Joe and Alpine Sandbags with 225, closely followed by Will and The Big One with 227 points.

In [ ]:
team_files = [
    'LeagueTeams_Points_Bar.png',
    'LeagueManagers_Average Points_Bar.png',
    'LeagueTeams_Sum Points.png',
    'LeagueManagers_Sum Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

We have a new leader at the top of the driver usage board, and it's Max Verstappen. The Dutchman has made 31 of the 65 possible selections this week, nearly half of all teams are running him. He's closely followed by Tsunoda and Albon on 26, and Magnussen and Bottas on 24. Interestingly, then it's Leclerc and Alonso with 22 and 21, respectively. So it seems that most of you are selecting Max and then picking from the handful of remaining drivers to suit your budget. This is reflected in the 4, 6, 7, and 9 selections for Piastri, Hamilton, Russell, and Perez respectively. Though currently, Perez is perhaps a better option.

Ferrari are your most chosen team this week, reaching 28 of the 65 teams. They are followed by Red Bull with 20, and Haas with 18. Not many Aston Martin selections this week, they only manage 5, with Alpine and Williams mustering 7 and 8, respectively.

Max Verstappen still topping the charts for most selected DRS boost with 28, that means that 3 of you have Max in your teams and haven't selected him for DRS boost. Lando Norris and Charles Leclerc manage 9 an 7 selections each.

Plenty of chips used this week, but there were 3 Extra DRS selections, 2 for Max and 1 for Sainz, which means that 1 of you has Max in your team and haven't selected him for any kind of boost. Unusual. We had 4 wildcards, 3 no negative, 3 limitless, and 3 extra DRS for the first sprint race of the season.

In [ ]:
count_files = [
    'LeagueCounts_Driver_Bar.png',
    'LeagueCounts_Constructor_Bar.png',
    'LeagueCounts_DRS Boost_Bar.png',
    'LeagueCounts_Extra DRS_Bar.png',
    'LeagueCounts_Perks_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None, None]

For more figures, please see the Facebook group album.

In [ ]:
subprocess.run(["python", "league_prizes.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'league_prizes.py', '2024'], returncode=0)

Prizes¶

Chine is obviously the first of the sprint races this year, so the graph below is not very representative of the current standings, essentially it is the team placement for this week (see above). The next race in Miami is also a sprint race, so there is going to be some early sign of who could be up for Sprint King this year.

In [ ]:
directory_path = Path(f'{root}/Data/{year}/Figures/Prizes')
file_paths = [
    Path(f'{directory_path}/{file}') for file in
    os.listdir(directory_path) if f'{race}' in file]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None]

F1 Play¶

We have a tie this week between Matty and Josh, with both players scoring 3/10 to take the top step. Stuart clearly forgot or made some bad decisions as they scored 0/10.

That takes the scores to:

Stuart - 14

Josh - 16

Matty - 7

In [ ]:
F1_play = {
    "Stuart S": [3, 5, 2, 4, 0],
    "Matty J": [2, 2, 0, 0, 3],
    "Josh M": [2, 3, 2, 6, 3]}
io.save_json_dicts(
    out_path=Path(f'{root}/Data/{year}/F1_Play.json'),
    dictionary=F1_play)
subprocess.run(["python", "F1_play.py", f'{year}'])
points_files = [
    'Points.png',
    'Sum Points.png',
    'Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/F1_Play')
file_paths = [Path(f'{directory_path}/{race}_F1Play_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None]

Next Up¶

The next race is Miami, with a sprint shootout late on Friday evening, a sprint race middle of Saturday, qualifying on Saturday evening, and a nice late race start on Sunday. Miami is the second of our sprint races, so make use of those extra sessions wisely! Best of luck to you all.